#ifndef DBOPERATOR_H
#define DBOPERATOR_H

#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>
#include <QVariant>
#include <QDir>
#include <QSqlError>

typedef struct {
    int id;
    QString username;
    QString password;
    QString sex;
    int goldcoin;
    int honor;
    int knowledge;
    QString idno;
    QString curclothes;
    QString clothes;
    QString item;
} container;    // 用来保存人物的相关信息

typedef struct {
    int idno;       // 决定宠物的唯一性
    int id;         // 用于系统识别宠物的种类提取数据包
    int attack;
    int defense;
    int maxhp;
    int curhp;
    QString attribute;
    int fetter;
    int lv;
    QString skill;
} pokemon;

// 在这个类中定义数据库的一系列操作
class DbOperator
{
public:
    // 构造函数中建立连接
    DbOperator();
    // 销毁对象之后断开连接
    ~DbOperator();
    // 打开数据库，成功则返回true（进行相关操作时记得先开启数据库连接）
    bool OpenDb();
    // 检测表单是否存在:
    bool TableExist(QString& tableName);
    // 插入一组数据        ※
    void insertOneMsg(container& msg);
    // 创建表
    bool buildTable();
    // 查询trainer数据，返回container：      ※
    container searchTrainerMsg(int id);
    // 查询对应的pokemon的数据，返回pokemon;
    pokemon searchPokemonMsg(int idno);
    // 更新金币数据
    void updateGoldCoin(int id, int newCoinNum);
    // 更新物品数量
    void updateItem(int id, QString newItem);
    // 更新pokemon好感度：
    void updatefetter(int idno, int fetter);
    // 将宠物回复满血：
    void cureMaxHP(int idno);
    // 更新当前血量
    void setcurHp(int idno, int curHp1);

    QSqlDatabase getDb() const;

    void setNullPokemon(pokemon& p);

private:
    QSqlDatabase db;    // 创建的数据库连接
};

#endif // DBOPERATOR_H
